
class Config {
  /**
   * 所有能够摇到的数字的成员
   * @type {ConfigCandidate[]}
   */
  candidates = [];

  /**
   * 是否启用：已经摇到的数值不再选择
   */
  autoRemoveEnable = false;
}

class ConfigCandidate {
  /**
   * @param {string[]} slot 长度为 3 的字符串数组
   * @param {number} weight 权重
   * @param {string} title
   */
  constructor(slot, weight = 10, title = null) {
    this.slot = slot;
    this.weight = weight;
    this.title = title;
  }

  /**
   * 首先有一个所有数值（字符串格式）的列表。 [001, 002, 003...120]
   * @type {string[]}
   */
  slot = [];

  /**
   * 权重
   * @type {number}
   */
  weight;

  /**
   * 保留字段
   * @type {string}
   */
  title = null;

  /**
   * 和 this.slot 比对是否相同
   * @param {string[]} figures 要比对的数字
   * @param {number} pos 第几位. null 表示全匹配
   */
  figureEquals (figures, pos = null) {
    if (pos != null) {
      return figures[pos] === this.slot[pos];
    }
    
    return figures[0] === this.slot[0]
        && figures[1] === this.slot[1]
        && figures[2] === this.slot[2];
  }

  extract () {
    let ret = {
      slot : this.slot,
      weight : this.weight
    };
    if (this.title) {
      ret.title = this.title;
    }
    return ret;
  }
}

export { 
  Config, ConfigCandidate
};
